package system

import (
	"gin-admin/common/dto/response"
	"gin-admin/global"
	"gin-admin/service/dto/request"
	"gin-admin/service/v1/system"

	"github.com/gin-gonic/gin"
)

type UserRoleHandler struct {
	UserRoleService system.UserRoleService
}

var UserRoleHandlerApp = &UserRoleHandler{
	UserRoleService: *system.UserRoleServiceApp,
}

// @Summary 创建用户角色信息
// @Tags /v1/用户角色管理
// @Accept json
// @Product json
// @Param data body request.CreateOrModifyUserRoleRequest true "创建用户角色请求参数"
// @Router /api/v1/user_role/create [post]
func (urh *UserRoleHandler) CreateUserRoleHandler(ctx *gin.Context) {
	var createUserRoleRequest request.CreateOrModifyUserRoleRequest
	if err := ctx.ShouldBindJSON(&createUserRoleRequest); err != nil {
		global.GA_LOGGER.Sugar().Errorw("参数校验失败", "error", err)
		response.Failed(ctx)
		return
	}
	err := urh.UserRoleService.CreateUserRoleService(&createUserRoleRequest)
	if err != nil {
		response.FailedWithCode(ctx, err.Code)
		return
	}
	response.SuccessNoData(ctx)
}

// @Summary 删除用户角色信息
// @Tags /v1/用户角色管理
// @Accept json
// @Product json
// @Param data body request.DetailUserRoleRequest true "删除用户角色请求参数"
// @Router /api/v1/user_role/delete [delete]
func (urh *UserRoleHandler) DeleteUserRoleHandler(ctx *gin.Context) {
	var deleteUserRoleRequest request.DetailUserRoleRequest
	if err := ctx.ShouldBindJSON(&deleteUserRoleRequest); err != nil {
		global.GA_LOGGER.Sugar().Errorw("参数校验失败", "error", err)
		response.Failed(ctx)
		return
	}
	err := urh.UserRoleService.DeleteUserRoleService(&deleteUserRoleRequest)
	if err != nil {
		response.FailedWithCode(ctx, err.Code)
		return
	}
	response.SuccessNoData(ctx)
}

// @Summary 更新用户角色信息
// @Tags /v1/用户角色管理
// @Accept json
// @Product json
// @Param data body request.ModifyUserRoleRequest true "更新用户角色请求参数"
// @Router /api/v1/user_role/modify [put]
func (urh *UserRoleHandler) ModifyUserRoleHandler(ctx *gin.Context) {

}

// @Summary 获取用户角色信息
// @Tags /v1/用户角色管理
// @Accept json
// @Product json
// @Param id query request.UserRoleInfoRequest true "获取用户角色请求参数"
// @Router /api/v1/user_role/info [get]
func (urh *UserRoleHandler) GetUserRoleInfoHandler(ctx *gin.Context) {
	var userRoleInfoRequest request.UserRoleInfoRequest
	if err := ctx.ShouldBindQuery(&userRoleInfoRequest); err != nil {
		global.GA_LOGGER.Sugar().Errorw("参数校验失败", "error", err)
		response.Failed(ctx)
		return
	}
	result, err := urh.UserRoleService.GetUserRoleInfoService(&userRoleInfoRequest)
	if err != nil {
		response.FailedWithCode(ctx, err.Code)
		return
	}
	response.Success(ctx, result)
}

// @Summary 获取用户角色列表信息
// @Tags /v1/用户角色管理
// @Accept json
// @Product json
// @Param data query request.UserRoleListRequest true "获取用户角色列表请求参数"
// @Router /api/v1/user_role/list [get]
func (urh *UserRoleHandler) GetUserRoleListHandler(ctx *gin.Context) {
	var userRoleListRequest request.UserRoleListRequest
	if err := ctx.ShouldBindQuery(&userRoleListRequest); err != nil {
		global.GA_LOGGER.Sugar().Errorw("参数校验失败", "error", err)
		response.Failed(ctx)
		return
	}
	result, code, err := urh.UserRoleService.GetUserRoleListService(&userRoleListRequest)
	if err != nil {
		response.FailedWithCode(ctx, code)
		return
	}
	response.SuccessWithList(ctx, result.Page, result.Size, result.Total, result.List)
}
